Solving 10385 - Duathlon (Ternary search)
[andmenj-acm.git] / 11203 - Can you decide it for ME / problem11203old.dpr
blobbcd668830ea35e3ba53ab497a718d958b345bfdd
1 program problem11203 (input, output);\r
2 \r
3 {$APPTYPE CONSOLE}\r
4 \r
5 \r
6 Function StrToInt(Const S: String): Integer;\r
7 Var\r
8   E: Integer;\r
9 Begin\r
10   Val(S, Result, E);\r
11 End;\r
14 function formadaPor(s : string; c : char) : boolean;\r
15 var\r
16   i : integer;\r
17 begin\r
18 result := true;\r
19 for i := 1 to length(s) do\r
20   begin\r
21   if s[i] <> c then\r
22     begin\r
23     result := false;\r
24     exit;\r
25     end;\r
26   end;\r
27 end;\r
29 {function isAxiom(s : String): boolean; overload;\r
30 var\r
31   x1, x2 : String;\r
32   i : integer;\r
33 begin\r
34 result := true;\r
35 x1 := '';\r
36 i:=1;\r
37 while ((s[i] <> 'M') and (i <= length(s))) do\r
38   begin\r
39   x1 := x1 + s[i];\r
40   inc(i);\r
41   end;\r
43 if (x1 = '') or (not formadaPor(x1, '?')) then\r
44   begin\r
45   result := false;\r
46   exit;\r
47   end;\r
49 s := copy(s, i, length(s));\r
50 if (s[1] <> 'M') or (s[2] <> '?') or (s[3] <> 'E') then\r
51   begin\r
52   result := false;\r
53   exit;\r
54   end;\r
56 x2 := copy(s, 4, length(s));\r
57 if (not formadaPor(x2, '?')) or ((length(x1) + 1) <> length(x2)) then\r
58   begin\r
59   result := false;\r
60   exit;\r
61   end;\r
62 end; }\r
65 function isAxiom(x, y, z : string) : boolean; overload;\r
66 begin\r
67 result := true;\r
68 if (length(x) + 1) <> (length(z)) then\r
69   result := false;\r
71 end;\r
73 function isTheorem(s : string) : boolean;\r
74 var\r
75   x, y, z : string;\r
76   i : integer;\r
77 begin\r
78 i := 1;\r
79 x := '';\r
80 while ((s[i] <> 'M') and (i <= length(s))) do\r
81   begin\r
82   x := x + s[i];\r
83   inc(i);\r
84   end;\r
86 if (x = '') or (not formadaPor(x, '?')) then\r
87   begin\r
88   result := false;\r
89   exit;\r
90   end;\r
92 s := copy(s, i, length(s)); //delete from the beggining until the character before the first M\r
93 if s[1] <> 'M' then\r
94   begin\r
95   result := false;\r
96   exit;\r
97   end;\r
99 s := copy(s, 2, length(s)); //delete the M\r
100 i := 1;\r
101 y := '';\r
102 while ((s[i] <> 'E') and (i <= length(s))) do\r
103   begin\r
104   y := y + s[i];\r
105   inc(i);\r
106   end;\r
108 if (y = '') or (not formadaPor(y, '?')) then\r
109   begin\r
110   result := false;\r
111   exit;\r
112   end;\r
114 s := copy(s, i, length(s)); //delete from the beggining until the character before the first E\r
115 if s[1] <> 'E' then\r
116   begin\r
117   result := false;\r
118   exit;\r
119   end;\r
121 z := copy(s, 2, length(s)); //delete the E\r
122 if not formadaPor(z, '?') then\r
123   begin\r
124   result := false;\r
125   exit;\r
126   end;\r
129 if length(y) = 1 then\r
130   result := isAxiom(x, y, z)\r
131 else\r
132   begin\r
133   y := copy(y, 1, length(y) - 1); //borra el ultimo\r
134   z := copy(z, 1, length(z) - 1);\r
135   result := isTheorem(x+'M'+y+'E'+z);\r
136   end;\r
137 end;\r
139 var\r
140   cuantos : integer;\r
141   i, j, principalLoop : integer;\r
142   entrada : String;\r
143   letrasCorrectas : Set of char;\r
144   invalid : boolean;\r
146 begin\r
148 //reset(input, 'input.txt');\r
149 //reset(output, 'out.txt');\r
152 letrasCorrectas := ['M', 'E', '?'];\r
153 readLn(entrada);\r
154 cuantos := strToInt(entrada);\r
156 {if isAxiom('?E??') then writeLn('si') else writeLn('no');\r
157 if isAxiom('??M?E???') then writeLn('si') else writeLn('no');\r
158 if isAxiom('??M?E??') then writeLn('si') else writeLn('no');\r
159 if isAxiom('?M??E??') then writeLn('si') else writeLn('no');\r
160 if isAxiom('?M?E??') then writeLn('si') else writeLn('no');\r
161 if isAxiom('???M?E????') then writeLn('si') else writeLn('no');\r
162 if isAxiom('?E?M??') then writeLn('si') else writeLn('no');  }\r
164 {if isTheorem('?E??') then writeLn('si') else writeLn('no');\r
165 if isTheorem('??M?E???') then writeLn('si') else writeLn('no');\r
166 if isTheorem('??M?E??') then writeLn('si') else writeLn('no');\r
167 if isTheorem('?M??E??') then writeLn('si') else writeLn('no');\r
168 if isTheorem('?M?E??') then writeLn('si') else writeLn('no');\r
169 if isTheorem('???M?E????') then writeLn('si') else writeLn('no');\r
170 if isTheorem('?E?M??') then writeLn('si') else writeLn('no');\r
171 if isTheorem('?M???E????') then writeLn('si') else writeLn('no');}\r
173 for principalLoop := 1 to cuantos do\r
174   begin\r
175   invalid := false;\r
176   readLn(entrada);\r
177   j := length(entrada);\r
178   for i := 1 to j do\r
179       if not (entrada[i] in letrasCorrectas) then\r
180       begin\r
181         invalid := true;\r
182         break;\r
183       end;\r
184   if invalid then\r
185     writeLn('no-theorem')\r
186   else\r
187     begin\r
188     if isTheorem(entrada) then\r
189       writeLn('theorem')\r
190     else\r
191       writeLn('no-theorem');\r
192     end;\r
193   end;\r
195 end.\r